import http from 'wechat-http'

// 接口基础地址
http.baseURL = 'https://live-api.itheima.net'

// 请求拦截器
http.intercept.request = (options) => {
  // console.log(options)
  // 指定默认的头信息
  const defaultHeader = {}
  // 权限认证
  defaultHeader.Authorization = `Bearer ${getApp().token}`
  // 合并头信息 优化方案, 如果options.header中有别的字段合并处理 不要直接替换覆盖   options.header = defaultHeader
  options.header = Object.assign({}, defaultHeader, options.header)
  // 拦截器处理后的请求参数
  return options
}

// 响应拦截器
http.intercept.response = async ({ statusCode, data, config }) => {
  // console.log(statusCode) // http 响应状态码
  console.log(config) // 发起请求时的参数  userInfo
  if (statusCode === 401) {
    // 如果进入了401 并且 config.url 包含refreshToken  说明refreshToken过期了
    if (config.url.includes('refreshToken')) {
      // console.log('refreshToken过期')
      // console.log(getCurrentPages().pop().route)
      // 清除坏的token和refreshToken
      getApp().setToken('token', null)
      getApp().setToken('refreshToken', null)
      return wx.redirectTo({
        url: `/pages/login/index?returnURL=/${getCurrentPages().pop().route}`,
      })
    }
    // 携带refreshToken 获取新token
    const res = await wx.http({
      method: 'post',
      url: '/refreshToken',
      header: {
        Authorization: `Bearer ${getApp().refreshToken}`,
      },
    })

    // 将响应回来的新token和refreshToken存储
    getApp().setToken('token', res.data.token)
    getApp().setToken('refreshToken', res.data.refreshToken)
    // 无感刷新 请求
    // 重新发送上一次失败的请求, 获取个人信息, 需要重写Authorization 携带新token
    return wx.http({ ...config, header: { Authorization: `Bearer ${getApp().token}` } })
  }
  // 拦截器处理后的响应结果
  return data
}
// 也可作为模块导出
export default http

// 挂载到 wx 全局命名空间
wx.http = http
